package demo03aninner;
/*
* 如果接口的实现类或者某个子类只需要使用唯一的一次
* 则可以省略该类的定义，而是用匿名内部类
*
* 匿名的是类名称，不是对象名称
*
* 格式：
* 接口名称  对象名 = new 接口名称(){
*       //覆盖重写接口中所有抽象方法
* };
*
* 注意！！
* 格式中：  new 接口名称(){...}
*1.new 代表创建对象的动作
* 2.接口名称就是匿名内部类需要实现哪个接口
* 3.{...}才是匿名内部类的内容
* 4.匿名内部类在创建对象时只能使用一次
*5.如果要多次使用匿名内部类创建对象，还不如去写实现类
*  */
public class DemoMain {
    public static void main(String[] args) {
        //普通方式
        MyInterface impl =new MyInterfaceImpl();
        impl.method1();

        //匿名内部类
        MyInterface obj=new MyInterface() {
            @Override
            public void method1() {
                System.out.println("匿名内部类实现了方法1");
            }
            public void method2() {
                System.out.println("匿名内部类实现了方法2");
            }

        };
        obj.method1();


        //匿名对象
        //如果希望对象呗多次调用，则必须按着上面的写法，给对象取名obj
        new MyInterface() {
            @Override
            public void method1() {
                System.out.println("匿名内部类实现了方法1");
            }
            public void method2() {
                System.out.println("匿名内部类内名对象名实现了方法2");
            }
        }.method1();


    }
}
